{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 为什么使用测试数据集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "np.random.seed(666)\n",
    "x = np.random.uniform(-3.0, 3.0, size=100)\n",
    "X = x.reshape(-1, 1)\n",
    "y = 0.5 * x**2 + x + 2 + np.random.normal(0, 1, size=100)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x110d4ac18>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(x, y)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 过拟合"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn.linear_model import LinearRegression\n",
    "from sklearn.pipeline import Pipeline\n",
    "from sklearn.preprocessing import PolynomialFeatures\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "def PolynomialRegression(degree):\n",
    "    return Pipeline([\n",
    "        (\"poly\", PolynomialFeatures(degree=degree)),\n",
    "        (\"std_scaler\", StandardScaler()),\n",
    "        (\"lin_reg\", LinearRegression())\n",
    "    ])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.68743577834336944"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.metrics import mean_squared_error\n",
    "\n",
    "poly100_reg = PolynomialRegression(degree=100)\n",
    "poly100_reg.fit(X, y)\n",
    "\n",
    "y100_predict = poly100_reg.predict(X)\n",
    "mean_squared_error(y, y100_predict)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "X_plot = np.linspace(-3, 3, 100).reshape(100, 1)\n",
    "y_plot = poly100_reg.predict(X_plot)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1165f5780>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(x, y)\n",
    "plt.plot(X_plot[:,0], y_plot, color='r')\n",
    "plt.axis([-3, 3, 0, 10])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "模型的泛化能力差"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### train test split的意义"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=666)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2.2199965269396573"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lin_reg = LinearRegression()\n",
    "lin_reg.fit(X_train, y_train)\n",
    "y_predict = lin_reg.predict(X_test)\n",
    "mean_squared_error(y_test, y_predict)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.80356410562978997"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "poly2_reg = PolynomialRegression(degree=2)\n",
    "poly2_reg.fit(X_train, y_train)\n",
    "y2_predict = poly2_reg.predict(X_test)\n",
    "mean_squared_error(y_test, y2_predict)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.92129307221507939"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "poly10_reg = PolynomialRegression(degree=10)\n",
    "poly10_reg.fit(X_train, y_train)\n",
    "y10_predict = poly10_reg.predict(X_test)\n",
    "mean_squared_error(y_test, y10_predict)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "14075796419.234262"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "poly100_reg = PolynomialRegression(degree=100)\n",
    "poly100_reg.fit(X_train, y_train)\n",
    "y100_predict = poly100_reg.predict(X_test)\n",
    "mean_squared_error(y_test, y100_predict)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
